

<?php

/*
  Polecenie: Uzupełnij metody o brakujący, tak aby otrzymany wynik pokrywał się z zawartością pliku rezultat.txt.
  Czynności jakie należy podjąć:
  - analiza:
    – bazy danych,
    – kodu instancji obiektu klasy Osoby,
    – analiza pliku wynikowego,
  - napisanie kodu.
 */

$sql = FALSE; 

class Osoby {

    private $baza = array(
        'host' => 'localhost',
        'user' => 'root',
        'pass' => '',
        'base' => 'php_test',
    );
    protected $status;
    public static $statusy = array('brak', 'pracownik', 'student');

    /**
     * 	Ustawia zmienną $status na 0 - brak.
     */
    public function __construct() {
        $this->sqlPolacz($sql);
        $this->status = 0;

    }

   public function __destruct()
   {
       $this->sqlRozlacz($sql);
   }
   
   // Połączenie z bazą danych
   public function sqlPolacz(&$sql)
   {
             $sql = @mysql_connect($this->baza['host'], $this->baza['user'], $this->baza['pass'])
             or die('Brak połączenia z serwerem MySQL.<br /> Błąd: '.mysql_error());

             $db = @mysql_select_db($this->baza['base'], $sql)
             // w przypadku niepowodzenia wyświetlamy komunikat
             or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error()); 

             mysql_query("SET NAMES utf8 "); 

             if($db === FALSE) return FALSE;
             return TRUE;
   }

    // Zamyka połączenie MySQL
    public function sqlRozlacz(&$sql)
    {
            @mysql_close($sql);
    }

    /**
     * Metoda sprawdza, czy nazwa jest ciągiem znakowym niezerowym; jeśli nie - zwróć false.
     * Następnie dodaje do bazy nazwę wraz z wcześniej ustawionym statusem.
     * @param string imie_nazwisko
     * @return boolen | integer w przypadku dodania do bazy zwracany jest id
     */
    public function dodajOsobe($imie_nazwisko) {
        if($imie_nazwisko != ''){
            $query = mysql_query("INSERT INTO `osoby` (`id`, `imie_i_nazwisko`, `status`) VALUES (NULL, '".$imie_nazwisko."', '".$this->status."')");
            $id = mysql_insert_id();
            return $id;
        } else {
            return FALSE;
        }
        
    }

    /**
     * Usuwa rekord w bazie danych, określony w parametrze.
     * @param integer niezerowa liczba naturalna
     * @return boolean
     */
    public function usunOsobe($indentyfikator) {
        if(is_int($indentyfikator) && $indentyfikator != 0){
            $query = mysql_query("DELETE FROM osoby WHERE id ='".$indentyfikator."' ");
            return TRUE;
        }else{
            return FALSE;
        }
    }

    /**
     * Zmienia nazwę wybranego rekordu w bazie.
     * @param integer $indentyfikator niezerowa liczba naturalna
     * @param string $imie_nazwisko niezerowy ciąg znaków
     * @return boolean
     */
    public function edytujNazweOsoby($indentyfikator, $imie_nazwisko) {
        if(is_int($indentyfikator) && $indentyfikator != 0 && $imie_nazwisko != ''){
            $query = mysql_query("UPDATE osoby SET imie_i_nazwisko = '".$imie_nazwisko."' WHERE id ='".$indentyfikator."' ");
            return TRUE;
        }else{
            return FALSE;
        }
    }

    /**
     * Pobiera wszystkie rekordy z bazy.
     * Rekordy zwrócone posiadają odpowiedni status w formie ciągu znakowego.
     * @return array()
     */
    public function wyswietlOsoby() {
        $result = Array();
        $query = mysql_query("SELECT * FROM osoby");
        if(mysql_num_rows($query)<1){ 
            $result .= 'Brak rekordów w tabeli.';
        } else{     
            $i=0;
            while ($row = mysql_fetch_array($query)) {
                $result[$i]['id'] = $row['id'];
                $result[$i]['imie_i_nazwisko'] = $row['imie_i_nazwisko'];
                $result[$i]['status'] = self::$statusy[$row['status']];
                 $i++;
            }
        }

       return $result;
    }

    /**
     * Sprawdza, czy argument funkcji zawiera się w tablicy statusów. Jeśli tak, to ustawia
     * zmienną wewnętrzną $status i zwraca true. Jeśli nie - zwraca false.
     * @param int $status
     * @return boolean
     */
    public function nadajStatus($status) {
        
        if(is_int($status)){
            if ($status < count(self::$statusy))
            {
                $this->status = $status;
                return TRUE;
            }
            else
            {
                return FALSE;
            }
        }else{
            // nieprawidłowy typ parametru
            return FALSE;
        }
    }

}



$pracownik = new Osoby();

$pracownik->nadajStatus(2);
$indentyfikatorJana = $pracownik->dodajOsobe('Jaś Nowak');
$indentyfikatorMichala = $pracownik->dodajOsobe('Michał Kowlski');
$indentyfikatorKasi = $pracownik->dodajOsobe('Katarzyna Pietrzak');
$indentyfikatorPiotrka = $pracownik->dodajOsobe('Piotr Piotrowski');

$pracownik->nadajStatus(1);
$indentyfikatorLukasza = $pracownik->dodajOsobe('Łukasz Mazur');

$pracownik->edytujNazweOsoby($indentyfikatorLukasza, 'Łukasz Mazurczak');

$pracownik->usunOsobe($indentyfikatorPiotrka);

print_r($pracownik->wyswietlOsoby());
?>